package com.wx.lambda.ii.chapter10;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;


/**
 * 第六章测试
 */
@Slf4j
public class Chapter10Test {
    public static void main(String[] args) {

        Insurance insurance = new Insurance();
        insurance.setName("123");

        Car car1 = new Car();
        car1.setInsurance(Optional.of(insurance));




        Person person = new Person();
        person.setCar(Optional.of(car1));

        Optional<Person> optPerson = Optional.of(person);
        /*
          getCar 得到一个 Optional<Car> 类型的数据，该数据会包含在 Optional 中
          此时流就变成Optional<Optional<Car>>
          再用map(Car::getInsurance) 就会类型不能匹配了
         */
//        Optional<String> name =
//                optPerson.map(Person::getCar)
//                        .map(Car::getInsurance)
//                        .map(Insurance::getName);
        /*
            flatMap public<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper) mapper返回的就是转变后的流
            这里Person::getCar 返回的是Optional<Car> 所以整体的流就变成Optional<Car>了，已经去掉了Optional了
         */
        Optional<String> insuranceName = optPerson.flatMap(Person::getCar)
                .flatMap(Car::getInsurance)
                .map(Insurance::getName);

        log.info("insuranceName={}", insuranceName.orElse("没有值"));



    }




}
